// 角色相关API接口
import request from './request'
import { API_CONFIG } from '@/config/api'

/**
 * 获取推荐AI角色分页列表
 * @param {Object} params - 查询参数
 * @param {number} params.current - 当前页码，默认1
 * @param {number} params.size - 每页数量，默认20
 * @param {string} params.keyword - 搜索关键词（可选）
 * @param {string} params.name - 角色名称搜索（可选，兼容旧参数）
 * @param {string} params.category - 分类筛选（可选）
 * @param {number} params.rating - 最低评分筛选（可选）
 * @param {boolean} params.featured - 是否只显示推荐角色（可选）
 * @param {boolean} params.official - 是否只显示官方角色（可选）
 * @param {string} params.sort - 排序方式（可选）：rating_desc, users_desc, created_desc 等
 * @returns {Promise} 角色分页数据
 */
export const getRolePage = (params = {}) => {
  // 如果没有传递任何参数，直接发送无参数请求
  if (Object.keys(params).length === 0) {
    return request({
      method: 'GET',
      url: API_CONFIG.ENDPOINTS.ROLES.PAGE
    })
  }

  // 兼容性处理：name参数映射为keyword
  if (params.name && !params.keyword) {
    params.keyword = params.name
    delete params.name
  }

  // 过滤空值和无效值
  const queryParams = Object.entries(params)
    .filter(([key, value]) => {
      // 保留有效值
      return value !== null &&
             value !== undefined &&
             value !== '' &&
             !(typeof value === 'string' && value.trim() === '')
    })
    .reduce((acc, [key, value]) => {
      // 对于字符串参数进行trim处理
      acc[key] = typeof value === 'string' ? value.trim() : value
      return acc
    }, {})

  return request({
    method: 'GET',
    url: API_CONFIG.ENDPOINTS.ROLES.PAGE,
    params: queryParams
  })
}

/**
 * 获取角色列表
 * @returns {Promise} 角色列表数据
 */
export const getRoleList = () => {
  return request({
    method: 'GET',
    url: API_CONFIG.ENDPOINTS.ROLES.LIST
  })
}

/**
 * 获取角色详情
 * @param {string} id - 角色ID
 * @returns {Promise} 角色详情数据
 */
export const getRoleDetail = (id) => {
  return request({
    method: 'GET',
    url: API_CONFIG.ENDPOINTS.ROLES.DETAIL,
    params: { id }
  })
}

/**
 * 添加角色
 * @param {Object} roleData - 角色数据
 * @returns {Promise} 添加结果
 */
export const addRole = (roleData) => {
  return request({
    method: 'POST',
    url: API_CONFIG.ENDPOINTS.ROLES.ADD,
    data: roleData
  })
}

/**
 * 更新角色
 * @param {Object} roleData - 角色数据（包含ID）
 * @returns {Promise} 更新结果
 */
export const updateRole = (roleData) => {
  return request({
    method: 'PUT',
    url: API_CONFIG.ENDPOINTS.ROLES.UPDATE,
    data: roleData
  })
}

/**
 * 删除角色
 * @param {string} id - 角色ID
 * @returns {Promise} 删除结果
 */
export const deleteRole = (id) => {
  return request({
    method: 'DELETE',
    url: API_CONFIG.ENDPOINTS.ROLES.DELETE,
    params: { id }
  })
}

/**
 * 获取热门推荐角色（快捷方法）
 * @param {number} size - 获取数量，默认10
 * @returns {Promise} 热门角色列表
 */
export const getPopularRoles = (size = 10) => {
  return getRolePage({
    size,
    sort: 'users_desc'
  })
}

/**
 * 获取精选推荐角色（快捷方法）
 * @param {number} size - 获取数量，默认8
 * @returns {Promise} 精选角色列表
 */
export const getFeaturedRoles = (size = 8) => {
  return getRolePage({
    size,
    featured: true,
    sort: 'rating_desc'
  })
}

/**
 * 获取官方角色（快捷方法）
 * @param {number} size - 获取数量，默认20
 * @returns {Promise} 官方角色列表
 */
export const getOfficialRoles = (size = 20) => {
  return getRolePage({
    size,
    official: true,
    sort: 'created_desc'
  })
}

/**
 * 搜索角色（快捷方法）
 * @param {string} keyword - 搜索关键词
 * @param {Object} filters - 其他筛选条件
 * @param {string} filters.category - 分类筛选
 * @param {number} filters.rating - 最低评分
 * @param {number} filters.size - 结果数量，默认20
 * @returns {Promise} 搜索结果
 */
export const searchRoles = (keyword, filters = {}) => {
  return getRolePage({
    keyword,
    size: 20,
    ...filters
  })
}

/**
 * 按分类获取角色
 * @param {string} category - 角色分类
 * @param {number} size - 获取数量，默认20
 * @param {string} sort - 排序方式，默认按评分排序
 * @returns {Promise} 分类角色列表
 */
export const getRolesByCategory = (category, size = 20, sort = 'rating_desc') => {
  return getRolePage({
    category,
    size,
    sort
  })
}